package cn.wizzer.app.user.modules.services;

import cn.wizzer.app.user.modules.models.User;
import cn.wizzer.app.user.modules.models.enums.EquipmentEnum;
import cn.wizzer.app.user.modules.models.vo.UserAccountVo;
import cn.wizzer.framework.util.Result;
import cn.wizzer.framework.base.service.BaseService;
import cn.wizzer.framework.page.Pagination;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;


public interface UserService extends BaseService<User> {
    void insertUser(User user, String inviteCode);

    /**
     * 查询用户信息 + 账户金额(后台提现页面使用)
     *
     * @param key
     * @param currencyId
     * @return
     */
    List<UserAccountVo> userAccountVoList(String key, String currencyId);

    /**
     * 后台用户列表
     *
     * @param conditionData
     * @param userKeyword
     * @param searchDate
     * @param pageNumber
     * @param pageSize
     * @return
     */
    Pagination userListNew(String conditionData, String userKeyword, String inviterKeyword, String[] searchDate, int pageNumber, int pageSize);


    /**
     * 邀请列表
     *
     * @param appid
     * @return
     */
    Pagination inviteList(String appid, Integer level, String timezone, long startTime, long endTime, int pageNumber, int pageSize);

    /**
     * 修改用户
     *
     * @param user
     */
    void updateUser(User user);

    Result login(String userName, String password, EquipmentEnum equipment, String ip);

    /**
     * 下线处理，查询当前在线的人
     * 获取redis的token，如果有，则不处理，如果token没了，那么更新成离线状态，设置登录时长
     */
    void offLine();

    Map<String, User> findByIds(List<String> ids);

    Map<String, String> usersToMapJSONString(List<User> users);

    BigDecimal calculateLoginDuration(User user);

    void newPwdValidation(User user, String newPwd, String newTransactionPwd);

    Map myInvitation(String userId);

    List invitationList(Integer limit);

    void clearCache();

    /**
     * 游客登录
     *
     * @param ip
     * @return
     */
    Result visitorLogin(String ip);

    /**
     * 临时账号登录创建账号
     *
     * @return
     */
    User attendTemp(String appid, String ip);


    /**
     * 删除游客账号
     *
     * @param id
     */
    void deleteVisitor(String id);


    /**
     * 管理员根据关键字模糊搜索用户(创建私聊使用)
     *
     * @param keyword
     * @param pageNumber
     * @param pageSize
     * @return
     */
    Pagination userList(String keyword, int pageNumber, int pageSize);


    /**
     * 所有下线充值、提现、投资的统计
     *
     * @param appid
     * @param level
     * @param startTime
     * @param endTime
     * @return
     */
    Map<String, BigDecimal> allSubReport(String appid, Integer level, long startTime, long endTime);
}
